package rpc.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class ProxyObject implements InvocationHandler {

    /**
     * 被代理的对象
     */
    private Object obj;

    /**
     * @param obj
     * 指定被代理的对象
     */
    public ProxyObject(Object obj) {
        this.obj = obj;
    }

    /**
     * @return
     * author zz.youpin.G_Y
     * 2018年4月16日
     * 说明:获取代理对象
     */
    public Object getProxy() {
        return Proxy.newProxyInstance(obj.getClass().getClassLoader(),
                obj.getClass().getInterfaces(), new ProxyObject(obj));
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("before method:"+method.getName());
        Object result = method.invoke(obj, args);
        System.out.println("after method:"+method.getName());
        return result;
    }
    
}
